package thinkingInJava.typeinfo;

//: typeinfo/pets/PetCreator.java
//Creates random sequences of Pets.
import java.util.*;

import thinkingInJava.typeinfo.Pet;

public abstract class PetCreator {
private Random rand = new Random(47);
// The List of the different types of Pet to create:
public abstract List<Class<? extends Pet>> types();
public Pet randomPet() { // Create one random Pet
 int n = rand.nextInt(types().size());
 try {
   return types().get(n).newInstance();
 } catch(InstantiationException e) {
   throw new RuntimeException(e);
 } catch(IllegalAccessException e) {
   throw new RuntimeException(e);
 }
}	
public Pet[] createArray(int size) {
 Pet[] result = new Pet[size];
 for(int i = 0; i < size; i++)
   result[i] = randomPet();
 return result;
}
public ArrayList<Pet> arrayList(int size) {
 ArrayList<Pet> result = new ArrayList<Pet>();
 Collections.addAll(result, createArray(size));
 return result;
}
} ///:~

